package com.example.data.dao;

import com.example.data.entity.Product;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.jdbc.SQL;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
public interface ProductDAO {

    //查询全部
    @Select("select * from tb_product")
    List<Product> queryDataAll();

    //条件查询
    @SelectProvider(type = ProductDAOProvider.class, method = "queryData")
    List<Product> queryData(Product product);

    //内部类实现动态sql
        class ProductDAOProvider{
        public String queryData(Product product){
            //结构化sql
           /* FROM和WHERE：跟SELECT一样，可以写多个参数，也可以在多行重复使用，最终会智能合并而不会报错
            这样语句适用于写很长的SQL时，能够保证SQL结构清楚。便于维护，可读性高。*/
            return new SQL(){
                {
                    SELECT("id,product_name");
                    SELECT("version,rank");
                    SELECT("unit,price,notes");  //会智能合并
                    FROM("tb_product");
                    if(product.getProduct_name()!=null && !(product.getProduct_name().equals("")) ){
                        WHERE("product_name like '%"+product.getProduct_name()+"%' ");
                    }
                    if(product.getVersion()!=null && !(product.getVersion().equals("")) ){
                    WHERE("version like '%"+product.getVersion()+"%' ");
                    }
                    if(product.getRank()!=null && !(product.getRank().equals("")) ){
                        WHERE("rank like '%"+product.getRank()+"%' ");
                    }
                }
            }.toString();
        }

    }

}
